/* 计算二叉树中所有结点个数 */

#include <iostream>
#include "BiTreefun.h"
using namespace std;

// 统计二叉树的结点个数 -- 方法一
int count(BTNode *p)
{
  int n1, n2;
  
  // 如果为空
  if (p == NULL)
    return 0;
  
  // 如果不为空
  else
  {
    // 统计左子树结点数量
    n1 = count(p->lchild);
    
    // 统计右子树结点数量
    n2 = count(p->rchild);
    
    // 返回结点个数
    return n1 + n2 + 1;
  }
}

// 统计二叉树的结点个数 -- 方法二
void count2(BTNode *p, int &n)
{
  // 如果不为空
  if (p != NULL)
  {
    // 更新
    ++n;
    
    // 统计左子树
    count2(p->lchild, n);
    
    // 统计右子树
    count2(p->rchild, n);
  }
}

int main()
{
  // 创建二叉树
  BTNode *T = create_bitree();
  
  // 统计结点个数
  int n = 0;
  count2(T, n);
  
  // 打印
  cout << "二叉树的结点个数为:" << n << endl;
}